package excercise;

import java.util.Scanner;

public class EX02_OOP {
	
	// 자릿수 구분 문자 _
	// 정수 리터럴이 너무 길면 가독성에 문제 있음
	// JDK 7에 새롭게 추가된 기능 중 하나는
	// 3 자리수마다 _ 를 사용할 수 있게 한 것

	// 클래스에 사용되는 변수의 종류
	// 멤버member 변수
	// class 블록내 선언한 변수
	// 해당 클래스를 통해서만 사용가능한 변수
	
	// 인스턴스instance/object(객체) 변수
	// 객체를 가르키는 변수를 의미
	// 클래스와 new 연산자를 사용한 문장의
	// 실행했을때의 결과물
	
	// 생성자constructor
	// 생성자는 객체를 생성하는데 사용하는 특별한 메서드
	// 모든 클래스는 하나 이상의 생성자가 있어야함
	// 설령, 메서드를 작성하지 않았더라도
	// 컴파일러가  자동으로 만들어서 넣어줌
	// 생성자는 일반 메서드와는 달리
	// void 나 return 을 사용하지 않음
	// 생성자 이름은 클래스 이름과 동일해야 함
	
	
	
	public static void main(String[] args) {
	// Retangle 클래스 시험 
	// 4, 40, red
	Retangle rRed = new Retangle();
	rRed.with = 4;
	rRed.height = 40;
	rRed.color = "red";
	
	System.out.println( rRed.height );
	System.out.println( rRed.color );
	System.out.println( rRed.getArea() );
	System.out.println( rRed.getPerimeter() );
	
	// Fan class 테스트
	// 초기값
	Fan f_base = new Fan();
	System.out.println( "Fan 초기값" );
	System.out.println( f_base.speed );
	System.out.println( f_base.on );
	System.out.println( f_base.radius );
	System.out.println( f_base.color );
	
	// 10, yellow, 최고속도, 동작중
	Fan f1 = new Fan();
	f1.speed = f1.FAST;				// 최고속도
	f1.on = true;  						// 동작중
	f1.radius = 10;
	f1.color = "yellow";
	f1.showFanInfo();
	
	// 5, blue, 중간속도, 정지
	Fan f2 = new Fan();
	f2.speed = f2.MEDIUM;
	f2.on = false;
	f2.radius = 5;
	System.out.println( f2.showFanInfo() );
			
	// Account class 테스트
	// 초기값
	Account cust01 = new Account(); 
	Scanner sc = new Scanner(System.in);
	
	// Account 1
	cust01.aid = 1122;
	cust01.balance = 20000;
	cust01.interestRate = 4.5F;
	cust01.dateCreated = "2013-11-06 13:15:45";
	
	// Account1 - 출력
	System.out.println( "문제1 ");
	System.out.println( "잔액 : " + cust01.balance );
	System.out.println( "원간이자율 : " + cust01.getMonthlyInterestRate() );
	System.out.println( "현재금액 : " + cust01.balance );
	cust01.withDraw( 3500 );
	System.out.println( "출금 후 :" + cust01.balance );
	cust01.deposit( 2000 );
	System.out.println( "입금 후 :" + cust01.balance );
	
	// Stock
	// 초기값 입력
	Stock iedu = new Stock();
	iedu.sname = "경영기술";
	iedu.previousClosingPrice = 1_000_000;
	iedu.currentPrice = 750_000;	
	
	iedu.sname = "경영기술";
	iedu.previousClosingPrice = 750_000;
	iedu.currentPrice = 1_750_000;	
	
	
	// 출력
	System.out.println( "회사이름 : " + iedu.sname );
	System.out.println( "어제 종가 : " + iedu.previousClosingPrice );
	System.out.println( "현재 시가 : " + iedu.currentPrice );
	System.out.print( "주가 변동률 " + iedu.getChangePercent() );
	
	

	} // main

}	//class

class Retangle{
	float with = 1.0F;
	float height = 1.0F;
	String color = "white";
	
	// 면적 계산
	float getArea(){
		return (float) (with * height);
	}  // getArea
	
	// 둘레 계산
	float getPerimeter(){
		return (float) with * 2 + height * 2;
	}
	
}

class Fan{
	// 변수선언
	final int SLOW = 1;
	final int MEDIUM = 2;
	final int FAST = 3;
	int speed = SLOW;
	boolean on = false;
	float radius = 5.0F;
	String color = "blue";
	
	// 선풍기 상태
	String showFanInfo() {
		/*if ( on == true ){
			System.out.println( speed );	
			System.out.println( color );	
			System.out.println( radius );	
			System.out.println( "작동중" );	
			}
		else {
			System.out.println( color );	
			System.out.println( radius );	
			System.out.println( "꺼져있음" );	
			}*/
		String msg = "";
		if( on == true){
			msg = speed + "," + color + "," + radius + ", 켜저있음";
		}
		else {
			msg = color + "," + radius + ", 꺼져있음";
		}
		return msg;	
	} // showFanInfo
}	//Fan

class Account{ 
	// 맴버편수	
	int aid = 0;
	int balance = 0;
	float interestRate = 0.0F;
	String dateCreated;
	
	// 월간 이자율
	float getMonthlyInterestRate(){
		return this.interestRate / 12;
	} //getMonthlyInterestRate
	
	// 예금 인출
/*	int withDraw( int gold ){					 // 메서드 안에 넘겨주는 변수를 인수라 한다.
		return this.balance = - gold; 
	} // withDraw
*/	
	// call by balue 로 인해 예금 금액이
	// 제대로 차감되지 않음
	
	int withDraw( int gold ){					 // 메서드 안에 넘겨주는 변수를 인수라 한다.
		return this.balance -= gold; 
	// withDraw
	
	}
	// 예금 입금
	int deposit( int depo ) {
		return this.balance += depo; 
	} // deposit
	
		
} // Account

class Stock{
	String sname;
	int previousClosingPrice;
	int currentPrice;
	
	// 주가변동률
	float getChangePercent(){
		return  ( 1 - ( (float)this.currentPrice / this.previousClosingPrice) ) * 100 ;
	} // getChangePercent
	
} //Stock